package model.comunication;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import model.Alumno;
import model.Area;
import model.Contacto;
import model.Curso;
import model.PersonalAdministrativo;
import model.dba.ContactoDAO;

public class IContacto {
	private ContactoDAO contactoDAO;
	private static IContacto contactoInterface;

	private IContacto() {
		this.contactoDAO = ContactoDAO.getInstance();
	}

	public static IContacto getInstance() {
		if (contactoInterface == null) {
			contactoInterface = new IContacto();
		}
		return contactoInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param fecha
	 * @param descripcion
	 * @param areas
	 *            NO OBLIGATORIO 1 solo por el momento o
	 * @param cursos
	 *            NO OBLIGATORIO 1 solo por el momento
	 * @param alumno
	 * @param personalAdministrativo
	 * @return
	 */
	public Contacto getContacto(Calendar fecha, String descripcion, List<Area> areas, List<Curso> cursos, Alumno alumno, PersonalAdministrativo personalAdministrativo) {
		return new Contacto(fecha, descripcion, areas, cursos, alumno, personalAdministrativo);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param id
	 * @param fecha
	 * @param descripcion
	 * @param areas
	 * @param cursos
	 * @param alumno
	 * @param personalAdministrativo
	 * @return
	 */
	public Contacto getContacto(Integer id, Calendar fecha, String descripcion, List<Area> areas, List<Curso> cursos, Alumno alumno, PersonalAdministrativo personalAdministrativo) {
		return new Contacto(id, fecha, descripcion, areas, cursos, alumno, personalAdministrativo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Contacto getContacto(Integer id) {
		return this.contactoDAO.get(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @return
	 */
	public List<Contacto> getAllContactos() {
		return this.contactoDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param ids
	 * @return
	 */
	public List<Contacto> getSelectedContacto(Integer... ids) {
		List<Contacto> idList = new ArrayList<Contacto>();
		for (Integer id : ids) {
			idList.add(this.contactoDAO.get(id));
		}
		return idList;
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param alumno
	 * @return
	 */
	public List<Contacto> getContactos(Alumno alumno) {
		return this.contactoDAO.get(alumno);

	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param alumno
	 * @return
	 */
	public List<Contacto> getContactos(PersonalAdministrativo personalAdministrativo) {
		return this.contactoDAO.get(personalAdministrativo);

	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param contacto
	 * @return
	 */
	public Integer addContacto(Contacto contacto) {
		return this.contactoDAO.add(contacto);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param contacto
	 * @return
	 */
	public boolean deleteContacto(Contacto contacto) {
		return this.contactoDAO.delete(contacto);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param contacto
	 * @return
	 */
	public boolean updateContacto(Contacto contacto) {
		return this.contactoDAO.update(contacto);
	}
}
